import java.util.Scanner;

public class test_7_27 {


    //创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
    //要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
    public static int max2(int x, int y) {
        return x>y?x:y;
    }
    public static int max3(int x, int y, int z) {
        return max2(x, y)>z?max2(x, y):z;
    }

    public static void main1(String[] args) {
        int a = 20, b = 1, c = 8;
        System.out.println(max3(a, b, c));
    }


    //求 N 的阶乘  。
    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("输入一个整数N，下面得到N的阶乘的结果");
        int n = scanner.nextInt();
        int product = 1;
        for(int i = 1; i <= n; i++) {
            product *= i;
        }
        System.out.println(product);
    }


    //求1！+2！+3！+4！+........+n!的和
    public static void main3(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("输入一个整数N，下面得到1到N的阶乘的和");
        int n = scanner.nextInt();
        int sum = 0;
        int product = 1;
        for(int i = 1; i <= n; i++) {
            product *= i;
            sum += product;
        }
        System.out.println(sum);
    }


    //求斐波那契数列的第n项。(迭代实现)
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextInt()) {
            int n = scanner.nextInt();
            int i = n;
            int S1 = 1, S2 = 1, Sn = 0;
            if(n <= 2) {
                Sn = S1;
            }else {
                n -= 2;
                while(n-- > 0) {
                    Sn = S1 + S2;
                    S1 = S2;
                    S2 = Sn;
                }
            }
            System.out.println("第"+ i +"个斐波那契数为："+ Sn);
        }
    }



    //在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码，求出结果
    public static int add(int x, int y) {
        return x + y;
    }
    public static double add(double a, double b, double c) {
        return a + b + c;
    }
    public static void main5(String[] args) {
        System.out.println(add(500, 20));
        System.out.println(add(600.0, 60.0, 6.66));
    }



    //在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值？
    public static int max(int x, int y) {
        return x>y?x:y;
    }
    public static double max(double a, double b, double c) {
        return (a>b?a:b)>c?(a>b?a:b):c;
    }
    public static void main6(String[] args) {
        System.out.println(max(100, 99));
        System.out.println(max(3.14, 6.66, 1.28));
    }


    public static int sum(int n) {
        if(n < 10) {
            return n;
        }
        return n % 10 + sum(n / 10);
    }


}
